import Vue from "vue"
import Vuex from 'vuex'
import {getRequest} from "../utils/api";
import SockJS from 'sockjs-client'
import Stomp from 'stompjs'
import { Notification } from 'element-ui';
Vue.use(Vuex);
//var Stomp = require("stompjs")
const now = new Date();


const store = new Vuex.Store({
    state:{
        routes:[],
        sessions:{}/*[
            {
            id:1,
            user:{
                name:'示例介绍',
                img:require(`@/assets/images/admin.jpg`)
            },
            messages:[{
                content:'Hello，这是一个基于Vue + Vuex + Webpack构建的简单chat示例，聊天记录保存在localStorge, 有什么问题可以通过Github Issue问我。',
                date:now
            },{
                content:'项目地址(原作者): https://github.com/coffcer/vue-chat',
                date:now
            },{
                content:'本项目地址(重构): https://github.com/is-liyiwei',
                date:now
            }]
        },{
            id:2,
            user:{
                name:'webpack',
                img:require(`@/assets/images/admin.jpg`)
            },
            messages:[{
                content:'Hi，我是webpack哦',
                date:now
            }]
        }]*/,
        admins:[],
        currentAdmin:JSON.parse(window.sessionStorage.getItem("user")),
        currentSession:null,
        filterKey:'',
        stomp:null,
        idDot:{}

    },

    mutations:{
        INIT_ADMIN(state,admin){
            state.currentAdmin = admin;
            state.currentAdmin.time = new Date();
        },
        initRoutes(state,data){
            state.routes = data;
        },
        changeCurrentSession (state,currentSession) {
            state.currentSession = currentSession;
            Vue.set(state.idDot,state.currentAdmin.username+"#"+state.currentSession.username,false);
        },
        addMessage (state,msg) {
            let mss = state.sessions[state.currentAdmin.username + "#" + msg.to];
            if(!mss) {
                //state.sessions[state.currentAdmin.username + "#" + msg.to] = [];
                Vue.set(state.sessions,state.currentAdmin.username + "#" + msg.to,[]);
            }
            state.sessions[state.currentAdmin.username + "#" + msg.to].push({
                content:msg.content,
                date: new Date(),
                self:!msg.notSelf,

            })
        },
        INIT_DATA (state) {
            //浏览器本地历史聊天记录
            let data = localStorage.getItem('vue-chat-session');
            //console.log(data)
            if (data) {
                state.sessions = JSON.parse(data);
            }
        },
        INIT_ADMINS(state,data){
            state.admins = data;

        }
    },

    actions:{
        connect: function (context) {
            context.state.stomp = Stomp.over(new SockJS("/ws/ep"));
            let token = window.sessionStorage.getItem("tokenStr");
            context.state.stomp.connect({'Auth-Token': token, 'Authorization': token}, success => {
                context.state.stomp.subscribe('/user/queue/chat', msg => {
                    let receiveMsg = JSON.parse(msg.body);
                    console.log('Notification-->',receiveMsg);
                    if(!context.state.currentSession || receiveMsg.from !=  context.state.currentSession.username){
                        Notification.info({
                            title: '【'+ receiveMsg.formNickName +'】发来一条消息',
                            message: receiveMsg.connect.length>10?receiveMsg.content.substr(0,10):receiveMsg.content,
                            position: 'bottom-right'
                        });
                        Vue.set(context.state.idDot,context.state.currentAdmin.username+"#"+receiveMsg.from,true);
                    }
                    receiveMsg.notSelf = true;
                    receiveMsg.from = receiveMsg.to;
                    context.commit('addMessage',receiveMsg);


                })
            }, error => {
                console.log(error)
            });
        },
        initData (context) {
            context.commit('INIT_DATA')
            //获取所有操作员头像信息
            getRequest("/chat/admin").then(resp=>{
                if(resp){
                    context.commit('INIT_ADMINS',resp)
                }
            })

        }
    }

})

store.watch(function (state) {
    return state.sessions
},function (val) {
    console.log('CHANGE: ', val);
    localStorage.setItem('vue-chat-session', JSON.stringify(val));
},{
    deep:true/*这个貌似是开启watch监测的判断,官方说明也比较模糊*/
})


export default store;
